██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
C sharp
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
Il mwbqC# (pronuncia inglese: [ˈsiː ˈʃɑːp], come l'espressione mwbwsee sharp, "vedere nitidamente"la fonte è sempre MSDN, vedi nota che segue)cite-ref-1[1] è un mwdalinguaggio di programmazione multi-paradigma che supporta tutti i concetti della programmazione orientata agli oggetti. Esso è stato sviluppato da mwdqMicrosoft all'interno dell'iniziativa mwdg.NET, e successivamente approvato come standard dalla mwdwECMA (ECMA-334) e mweaISO (norma mweqISO/IEC 23270).
La mwewsintassi e struttura del C# prendono spunto da vari linguaggi nati precedentemente, in particolare mwfaDelphi, mwfqC++, mwfgJava e mwfwVisual Basic.
Contents
• Esempi
• Mono
• DotGNU
• Rotor
• Note
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Storia del linguaggio
Il progettista principale di C# è mwgwAnders Hejlsberg, un informatico danese precedentemente coinvolto nello sviluppo dei linguaggi mwhaTurbo Pascal e Borland mwhqDelphi (attualmente di proprietà di Embarcadero).
È opinione comune che l'ispirazione venne dal linguaggio mwhwJava, dato che perfino il suo ideatore mwiaJames Gosling, nonché mwiqBill Joy di Sun Microsystem, lo definirono una sua imitazione, ma più limitata dal punto di vista dell'affidabilità, della sicurezza e della produttivitàcite-ref-2[2]. Invece, secondo Anders Hejlsberg e Microsoft stessa, la struttura di C# è più vicina a quella del mwjglinguaggio C++ di quella di mwjwJavacite-ref-3[3].
C# è strettamente legato allo sviluppo di mwlq.NET Framework. Infatti gli ingegneri di Microsoft utilizzarono nelle prime fasi della sua stesura un framework chiamato SMC, ovvero Simple Managed C, un sistema utilizzante il mwlglinguaggio C in modo gestito o "managed". Nel gennaio 1999, mwlwMicrosoft mise Anders Hejlsberg a capo di un gruppo di lavoro con il compito di produrre un nuovo linguaggio, chiamato provvisoriamente "Cool", acronimo di "C-like Object Oriented Language" (linguaggio orientato agli oggetti simile a C)cite-ref-4[4]. Il nome commerciale definitivo divenne C# alla presentazione ufficiale del progetto .NET da parte di Microsoft alla Professional Developers Conference tenutasi nel mwnaluglio mwnq2000 a mwngOrlando, quando anche le mwnwlibrerie di classi e il runtime di mwoaASP.NET vennero convertite in linguaggio C#.
Nel tempo C# e mwogJava hanno percorso strade differenti, aumentando complessivamente le differenze reciproche, sebbene ci siano stati anche evidenti casi di reciproco scambio di caratteristiche. Per esempio C#, a differenza di Java, utilizza sin dalla versione 2 la mwowreificazione per generare oggetti generici che possono essere usati come classi, riservando al momento del caricamento della classe in fase di esecuzione la compilazione effettiva del codice. Anche l'implementazione in ambedue i linguaggi dei mwpatipi generici, sebbene concettualmente identica, è stata implementata in maniera piuttosto differente. Invece, il concetto di boxing e unboxing propri di C# sono stati implementati successivamente anche in linguaggio Javacite-ref-5[5].
La versione C# 1.0, basata su .NET Framework 1.0, fu pubblicata commercialmente da Microsoft nel gennaio 2002 con il pacchetto di sviluppo Visual Studio .NET 2002. In seguito sono state pubblicate sino ad oggi nuove versioni del linguaggio e del framework .NET con i pacchetti mwqgMicrosoft Visual Studio. cite-ref-6[6]
| Versione C# | Data di presentazione | Versione .NET | Visual Studio |
|---|---|---|---|
| 1.0 | gennaio 2002 | 1.0 | Visual Studio .NET 2002 |
| 2.0 | novembre 2005 | 2.0 | Visual Studio .NET 2003 |
| 3.0 | novembre 2007 | 2.0/3.5 | Visual Studio 2008-2010 |
| 4.0 | aprile 2010 | 4.0 | Visual Studio 2010 |
| 5.0 | agosto 2012 | 4.5 | Visual Studio 2012-2013 |
| 6.0 | luglio 2015 | 4.6 | Visual Studio 2015 |
| 7.0 | marzo 2017 | 4.6.2 | Visual Studio 2017 |
| 7.1 | agosto 2017 | 4.7 | Visual Studio 2017 Ver. 15.3 |
| 7.2 | novembre 2017 | 4.7.1 | Visual Studio 2017 Ver. 15.5 |
| 7.3 | maggio 2018 | 4.7.2 | Visual Studio 2017 Ver. 15.7 |
| 8.0 | settembre 2019 | 4.8 | Visual Studio 2019 |
| 9.0 | settembre 2020 | 5 | Visual Studio 2019 |
| 10.0 | novembre 2021 | 6 | Visual Studio 2022 |
| 11.0 | novembre 2022 | 7 | Visual Studio 2022 |
| 12.0 | novembre 2023 | 8 | Visual Studio 2022 |
Caratteristiche del linguaggio
C# è, in un certo senso, il linguaggio che meglio degli altri descrive le linee guida sulle quali ogni programma mwmw.NET gira. Infatti è stato creato da mwnaMicrosoft specificatamente per la programmazione nel mwnqframework mwng.NET. I suoi tipi di dati "primitivi" hanno una corrispondenza univoca con i tipi mwnw.NET e molte delle sue astrazioni, come mwoaclassi, mwoqinterfacce, mwogdelegati ed mwoweccezioni, sono particolarmente adatte a gestire il framework .NET. È divenuto quindi il linguaggio ordinario per realizzare software in ambiente Windows.
Definire in forma classica C# come linguaggio interpretato o compilato nel senso classico dei termini è piuttosto complicato. In effetti è ambedue le cose allo stesso tempo. Data la sua stretta integrazione con il framework .NET, i codici sorgente scritti in C# sono normalmente compilati secondo i criteri mwpqJIT. In pratica, la trasformazione in codice macchina (ovvero eseguito direttamente dalla mwpgCPU) viene compiuta solo all'atto di caricamento ed esecuzione del programma. In prima istanza il mwpwcodice sorgente viene convertito dal framework in un codice intermedio detto mwqaCIL e solo all'esecuzione del programma il mwqqCLR specifico per il mwqgsistema operativo utilizzato converte il CIL in mwqwlinguaggio macchina specifico per l'mwrahardware ospite, man mano che viene eseguito. Ciò comporta che l'esecuzione del codice può risultare più lenta alla prima esecuzione diventando poi più veloce. Inoltre, vengono tipicamente svolte durante la compilazione stessa delle ottimizzazioni progressive del codice macchina, producendo così un codice eseguito più velocemente e teoricamente "ottimale" solo dopo alcune esecuzioni complete dello stesso.
Una seconda possibilità è la cosiddetta mwrgcompilazione Ngen, che permette di convertire tutto il codice CIL in codice macchina in una volta sola. Ciò ha il vantaggio di consentire l'implementazione di ambienti di sviluppo che utilizzino C# in qualunque sistema operativo, una volta implementato il mwrwCLR specifico.
La sintassi di base del C# è spesso molto simile o identica a quella dei linguaggi C, C++ e Java. Alcune delle caratteristiche di base sono:
• I nomi di variabili, funzioni, classi e altri elementi sono sempre sensibili alle minuscole, ovvero "case-sensitive".
• Ogni specifica dev'essere chiusa dal carattere mwtapunto e virgola (;).
• Le parentesi graffe ({}) sono usate per raggruppare specifiche.
• Secondo le consuetudini dei linguaggi orientati agli oggetti, le specifiche sono di regola raggruppate in mwugmetodi (ovvero funzioni), i mwuwmetodi sono raggruppati in mwvaclassi, e le mwvqclassi sono raggruppate nei mwvgnamespace.
Differenze da C e C++
Rispetto a mwwqC o a mwwgC++ il linguaggio C# presenta varie modifiche, volte principalmente ad evitare errori tipici e ambiguità della programmazione in mwwwlinguaggio C:
• I puntatori possono essere utilizzati solo in particolari blocchi di codice marcati come mwxgunsafe.
• In molte operazioni aritmetiche vengono controllati eventuali mwyaoverflow.
• Gli oggetti dinamici non vengono deallocati esplicitamente, ma viene gestita automaticamente e implicitamente dal mwyggarbage-collector quando non esistono più riferimenti a tali oggetti. Questo sistema evita i due problemi dei mwywmwzadangling pointer e del mwzqmwzgmemory leak, anche se con una riduzione delle prestazioni.
• Le sole conversioni implicite consentite sono quelle mw1gsafe, ovvero che non espongono al rischio di perdita di dati causata dal diverso tipo di dato. Per esempio non sono consentite conversioni implicite fra mw1winteger e mw2aboolean oppure tra enumeratori ed mw2qinteger.
• C# non dispone dei mw2wtemplate tipici del mw3aC++, ma nella versione 2.0 sono stati introdotti i mw3qgeneric.
Differenze da Java
Sebbene C# sia ritenuto simile a mw4aJava, esistono alcune importanti differenze fra i due linguaggi. Quella maggiormente visibile è certamente la presenza in C# di molti costrutti, alcuni dei quali chiaramente derivati dal mw4qC++, che in mw4gJava sono stati deliberatamente vietati. I sostenitori del C# affermano che tutto ciò rende il codice più chiaro, mentre i sostenitori di mw4wJava affermano che proprio la presenza di un gran numero di parole-chiave e di regole da ricordare rende il linguaggio più difficile da imparare e utilizzare.
Altre differenze evidenti sono le seguenti:
• Java utilizza un diverso modo per richiamare i metodi costruttori di una classe, ovvero dalla prima riga di un costruttore ne richiama un altro.
Funzionalità introdotte con gli aggiornamenti
Versione 3
Versione 4
• Pseudo tipo mw-qdynamic
• mw-wCovarianza e Controvarianza nei tipi di parametri per interfacce generiche e delegaticite-ref-7[7]
• Specifica mwaquref opzionale per l'uso di mwaqyCOM
• Parametri opzionali e nomi di argomenti
• Indicizzatori di Proprietà (riconosciuti, ma non utilizzati dagli oggetti in C#)
Versione 5
Versione 6
cite-ref-9[9]
• Servizio compilatore
• Importazione di membri di tipo statico nel namespace
• Filtri di eccezione
• mwar4Await nei blocchi mwar8catch/mwasafinally
• Inizializzatori di proprietà automatici
• Valori di default per proprietà di tipo mwasmgetter esclusivo
• Membri expression-bodied
• Propagatore di mwasynull
• Interpolazione stringhe
• Operatore mwasknameof
• Inizializzatore di dizionario
Versione 7
cite-ref-10[10]
• mwatmBinary literals
• Decostruttori
• Separatori di cifra
• Funzioni locali
• Tipo mwatgswitch
• mwatoRef mwatsreturn
• mwat0Tuple con nome
• mwat8Out var
• Pattern Matching
• Ritorni asincroni arbitrari
• mwaumRecords
• Get e Set nelle definizioni di espressioni
• Costruttori e finalizzatori nelle definizioni di espressioni
Versione 8
cite-ref-11[11]
• Nullable reference types
• Membri di interfaccia di default
• Flussi asincroni
• Switch expressions
• Funzioni statiche locali
• Membri struct di sola lettura
• Miglioramento delle stringhe verbatim interpolate
• Records migliorati
• Indici ed intervalli
• Assegnamento con null-coalescing
Versione 9
cite-ref-12[12]
• Dichiarazioni di primo livello
• Miglioramenti della corrispondenza dei modelli
• I setter solo Init
• Numeri interi di dimensioni native
• Puntatori a funzione
• Funzioni static anonime
• Parametri di scarto di Lambda
• Records migliorati
• Attributi su funzioni locali
• Nuove funzionalità per metodi parziali
Esempi
Hello world!
Il seguente esempio visualizza il testo "mwawsHello world" su console.
using System;
class HelloWorldApp
{
public static void Main(string[] args) // punto d'ingresso del programma
{
Console.WriteLine("Hello World");
Console.ReadLine ();
}
}
Invece il seguente esempio stampa il testo "mwaz4Hello world" in una Message Box.
using System.Windows.Forms;
class HelloWorldApp
{
public static void Main()
{
MessageBox.Show("Hello World");
}
}
Definizione di classe
Il seguente esempio definisce una classe di nome Persona che espone una proprietà mwacuNome il cui valore viene memorizzato nella variabile mwacymNome:
using System;
namespace Program
{
class Persona
{
private string mNome;//se non specifico "private" non ci sono differenze, perché è sottinteso.
public string Nome
{
get { return mNome; }
set { mNome = value; }
}
}
}
Lo stesso esempio si può scrivere in una forma equivalente, utilizzando la sintassi delle mwagoAutomatic Properties introdotta con la versione 3.0:
using System;
class Persona
{
public string Nome { get; set; }
}
Da notare che il linguaggio C# risulta uno strumento sintattico per l'utilizzo delle librerie presenti nei namespace del Framework mwaiw.NET di mwai0Microsoft. A parte le strutture interne al linguaggio, il programmatore C# deve fare riferimento alle librerie, anche per la gestione dell'I/O, come del resto in C e C++. Infatti, nel primo esempio presentato viene utilizzato il namespace mwai4System del quale sarà poi utilizzato il metodo mwai8WriteLine della classe mwajaConsole per scrivere a video la scritta "Hello World".
Deserializzazione di un file JSON
In questo esempio si utilizza il namespace nativo mwajmSystem.Text.Json per deserializzare un semplice file JSON, il cui contenuto viene in seguito formattato e stampato su mwajqSystem.Console.
Prendiamo in considerazione il seguente JSON.
{
"0": "Carthago delenda est.",
"1": "Alea iacta est.",
"2": "Cogito ergo sum."
}
Questo il codice in C#.
using System.Text.Json;
namespace JSONDeserialization;
class Program
{
// Creiamo un'istanza di "JsonSerializerOptions.Default".
// È sempre consigliato inizializzarne solo una per programma.
// La parola chiave "readonly" significa che la variabile non verrà modificata dopo l'inizializzazione.
private readonly static JsonSerializerOptions JsonOptions = JsonSerializerOptions.Default;
// La funzione riceve come parametro la directory del file JSON che vogliamo deserializzare.
// Ci ritorna un dizionario contenente chiavi, identificatori unici di tipo "Int32", e un valore di tipo "String" per ogni chiave.
private static Dictionary<int, string> GetJsonAsDictionary(string directory)
{
// Dichiariamo un dizionario vuoto e nullable.
Dictionary<int, string>? data = [];
// Deserializziamo il file usando questa funzione statica e specificando il tipo di ritorno.
// Alcune funzioni richiedono che venga specificato il tipo di ritorno tra due parentesi angolari.
data = JsonSerializer.Deserialize<Dictionary<int, string>>(File.ReadAllText(directory), JsonOptions);
// File è una classe statica fornita da System per semplici manipolazioni di file.
// Se il dizionario è nullo o vuoto, facciamo scattare una "Exception".
// Le "Exception" spezzano immediatamente il runtime flow di un programma.
if (data is null || data.Keys.Count == 0)
throw new Exception("Il file è vuoto o non è stato deserializzato correttamente.");
return data;
}
private static void Main()
{
// Infine usiamo "string.Join" per scrivere l'output della funzione sulla Console.
Console.WriteLine(string.Join(", ", GetJsonAsDictionary("test.json")));
}
}
L'output sarà quindi: mwaws[0, Carthago delenda est.], [1, Alea iacta est.], [2, Cogito ergo sum.]
Calcolatrice
Questo esempio mostra una semplice calcolatrice.
using System;
namespace Calcolatrice
{
class Program
{
static void Main(string[] args)
{
int Numero1 = 0, Numero2 = 0; // Dichiara due numeri e li inizializza a 0.
int Risultato; // Variabile che serve per il risultato dei due numeri.
char Scelta; // Scelta dell'utente riferito alle opzioni nel menù.
do
{
Console.Clear(); // Cancella tutte le scritte presenti nella console.
/* Menù */
Console.WriteLine("Benvenuto nella calcolatrice."); // Scrive nella console "Benvenuto nella calcolatrice.".
Console.WriteLine("1. Addizione"); // Scrive nella console "1. Addizione".
Console.WriteLine("2. Sottrazione"); // Scrive nella console "2. Sottrazione".
Console.WriteLine("3. Moltiplicazione"); // Scrive nella console "3. Moltiplicazione".
Console.WriteLine("4. Divisione"); // Scrive nella console "4. Divisione".
Console.WriteLine("5. Esci"); // Scrive nella console "5. Esci".
Scelta = Console.ReadKey().KeyChar; // L'opzione dell'utente viene memorizzata nella variabile "Scelta"
Console.Clear(); // Cancella tutte le scritte presenti nella console.
if(Scelta != '5')
{
Console.Write("Inserisci il Primo numero: "); // Chiede all'utente di inserire il primo numero.
Numero1 = Convert.ToInt32(Console.ReadLine()); // Assegna il primo numero inserito dall'utente alla variabile "Numero1".
Console.Write("Inserisci il secondo numero: "); // Chiede all'utente di inserire il secondo numero.
Numero2 = Convert.ToInt32(Console.ReadLine()); // Assegna il secondo numero inserito dall'utente alla variabile "Numero2".
}
switch(Scelta) // Con lo switch si analizzano i vari casi del valore della variabile.
{
case '1':
{
Risultato = Numero1 + Numero2; // Il risultato dell'addizione va a finire dentro alla variabile "Risultato".
Console.WriteLine(Numero1 + " + " + Numero2 + " = " + Risultato); // Dice all'utente il risultato.
break; // Termina subito lo switch per non fare anche gli altri casi
}
case '2':
{
Risultato = Numero1 - Numero2; // Il risultato della sottrazione va a finire dentro alla variabile "Risultato".
Console.WriteLine(Numero1 + " - " + Numero2 + " = " + Risultato); // Dice all'utente il risultato.
break; // Termina subito lo switch per non fare anche gli altri casi
}
case '3':
{
Risultato = Numero1 * Numero2; // Il risultato della moltiplicazione va a finire dentro alla variabile "Risultato".
Console.WriteLine(Numero1 + " * " + Numero2 + " = " + Risultato); // Dice all'utente il risultato.
break; // Termina subito lo switch per non fare anche gli altri casi
}
case '4':
{
if (Numero2 != 0) // La divisione per zero è impossibile quindi si aggiunge un if
{
Risultato = Numero1 / Numero2; // Il risultato della divisione va a finire dentro alla variabile "Risultato".
Console.WriteLine(Numero1 + " / " + Numero2 + " = " + Risultato); // Dice all'utente il risultato.
}
else
{
Console.WriteLine(Numero1 + " / " + Numero2 + " = Impossibile!"); // Risultato impossibile
}
break; // Termina subito lo switch per non fare anche gli altri casi
}
case '5':
{
break; // Termina subito lo switch per non fare anche gli altri casi
}
default:
{
Console.WriteLine("Opzione Errata");
break;
}
}
Console.WriteLine("Premere invio per andare avanti");
Console.ReadKey();
}
while (Scelta != '5'); // Se la condizione è vera il codice al suo interno viene rieseguito!
}
}
}
Implementazioni
Il mwbsccompilatore di riferimento è mwbsgMicrosoft Visual C#, parte del pacchetto mwbsoMicrosoft mwbssVisual Studio e attualmente mwbswopen sourcecite-ref-13[13].
Esistono sul mercato e nei circuiti dell'mwbtiopen source altre implementazioni.
Mono
Il progetto mwbtuMono implementa un compilatore C# con licenza mwbtyopen source, un'implementazione completa mwbtcopen source del mwbtgCLI, o mwbtkmwbtoCommon Language Infrastructure, comprendente le librerie di framework richieste da specifiche mwbtsECMA, oltre a una quasi completa implementazione delle librerie di classi proprietarie di mwbtw.NET attualmente aggiornate alla versione 3.5. Fino alla versione 2.6 di Mono non è prevista l'implementazione di mwbt0Windows Presentation Foundation (mwbt4WPF), sebbene sia invece prevista per successive evoluzioni della piattaforma Mono. Inoltre attualmente sono previste implementazioni solo parziali di LINQ to SQL e WCF.
DotGNU
Il progetto mwbumDotGNU, attualmente non più supportatocite-ref-14[14], include un compilatore C#, una implementazione parziale della mwbugCLI, comprese le librerie richieste secondo le specifiche mwbukECMA, oltre a un sottoinsieme di alcune librerie di classi mwbuo.NET proprietarie di Microsoft, aggiornate alla versione .NET 2.0.
Rotor
Il progetto Rotor di Microsoft, distribuito con licenza gratuita solo per scopi didattici e di ricerca, fornisce una implementazione del runtime CLR e un compilatore C#, con un sottoinsieme dell'infrastruttura CLI conforme alle specifiche ECMAcite-ref-15[15].
Standardizzazione
Note
cite-note-11. ↑ Il nome gioca sul fatto che C♯, in inglese e altre lingue, indica la nota musicale Do diesis, un semitono sopra il "C", ovvero il Do (fonte: mwbwuJames Kovacs, mwbwymwbwcC#/.NET History Lesson, su mwbwgjameskovacs.com, 7 settembre 2007. mwbwkURL consultato il 7 giugno 2012 mwbwo(archiviato dall'mwbwsurl originale il 21 agosto 2011).). In effetti, il nome del linguaggio andrebbe scritto con il simbolo del mwbwwdiesis, ma in sostituzione si usa il mwbw0cancelletto per praticità di scrittura (fonte: mwbw4MSDN, mwbw8Domande frequenti su Visual C#). In italiano, il gioco di parole viene perso.
cite-note-22. ↑ mwbxm(mwbxqmwbxuEN) mwbxymwbxcWhy Microsoft C# isn't, su mwbxgcnet.com.
cite-note-33. ↑ mwbxw(mwbx0mwbx4EN) mwbx8mwbyaC# and Java: Comparing Programming Languages, su mwbyemsdn.microsoft.com.
cite-note-44. ↑ mwbyu(mwbyymwbycEN) Naomi Hamilton, mwbygmwbykThe A-Z of Programming Languages: C#, in mwbyomwbysComputerworld, 1º ottobre 2008. mwbywURL consultato il 4 febbraio 2017.
cite-note-55. ↑ mwbza(mwbzemwbziEN) Klaus Kreft and Angelika Langer, mwbzmmwbzqAfter Java and C# - what is next?, su mwbzuartima.com. mwbzyURL consultato il 4 febbraio 2017.
cite-note-66. ↑ mwbzomwbzsmwbzwCronologia di C#, su mwbz0docs.microsoft.com.
cite-note-77. ↑ mwbae(mwbaimwbamEN) mwbaqmwbauCovariance and Contravariance (C#), su mwbayMSDN.
cite-note-88. ↑ mwbao(mwbasmwbawEN) mwba0mwba4An Introduction to New Features in C# 5.0, in mwba8The Microsoft MVP Award Program Blog. mwbbaURL consultato il 4 febbraio 2017.
cite-note-99. ↑ mwbbqMark Michaelis, mwbbumwbbyC# 6.0 nuovo e migliorato, su mwbbcmsdn.microsoft.com. mwbbgURL consultato il ottobre 2014.
cite-note-1010. ↑ mwbbw(mwbb0mwbb4EN) mwbb8mwbcaLanguage Features Status, su mwbcegithub.com.
cite-note-1111. ↑ mwbcumwbcymwbccNovità C# 8, su mwbcgdocs.microsoft.com.
cite-note-1212. ↑ mwbcwmwbc0mwbc4Novità C# 9, su mwbc8docs.microsoft.com.
cite-note-1313. ↑ mwbdm(mwbdqmwbduEN) mwbdymwbdcDonTen Roslyn project on GutHub, su mwbdggithub.com.
cite-note-1414. ↑ mwbdw(mwbd0mwbd4EN) mwbd8mwbeaDotGNU Project, su mwbeegnu.org.
cite-note-1515. ↑ mwbeu(mwbeymwbecEN) mwbegmwbekProgetto Rotor in MSDN, su mwbeomsdn.microsoft.com.
cite-note-1616. ↑ mwbe4mwbe8mwbfaStandard ECMA-334, su mwbfeecma-international.org.
cite-note-1717. ↑ mwbfumwbfymwbfcStandardizzazione ISO, su mwbfgiso.org mwbfk(archiviato dall'mwbfourl originale l'8 maggio 2012).
Bibliografia
• mwbf4John Sharp, Microsoft Visual C# 2012, Mondadori Informatica, 2014, p. 251, ISBN 978-88-6114-404-0.
• mwbga(EN) A. Boehm, J. Murach, Murach's C# 2015, Mike Murach & Associates, 2016, p. 908, ISBN 978-1-890774-94-3.
• mwbgiD. Bochicchio, C. Civera, M. De Sanctis, A. Leoncini, M. Leoncini, S. Mostarda, C#6 e Visual studio 2015. Guida completa per lo sviluppatore, Hoepli Informatica, 2016, p. 456, ISBN 978-88-203-7099-2.
• mwbgqAntonio Pelleriti, Programmare con C# 8. Guida completa, Edizioni LSWR, 2019, p. 928, ISBN 978-88-68957698.
• mwbgy(EN) A. Troelsen, P. Japikse, C# 6.0 and the .NET 4.6 Framework, Apress, 2016, p. 1625, ISBN 978-1-4842-1333-9.
• mwbgg(EN) J. Albahari, B. Albahari, C# 6.0 in a Nutshell: The Definitive Reference, O'Reilly Media, 2016, p. 1136, ISBN 978-1-4919-2706-9.
• (IT) A. Pelleriti Programmare con C# 8, Digital Life Style, p.mwbgo 243, ISBN 978-88-6895-769-8
Altri progetti
Altri progetti
• Wikibooks
• Wikiversità
• Wikimedia Commons
• Wikibooks contiene testi o manuali su C#
• Wikiversità contiene risorse su C#
• Wikimedia Commons contiene immagini o altri file su C#
Collegamenti esterni
• (EN) Sito ufficiale, su docs.microsoft.com.
• Repository sorgenti di C sharp, su github.com.
• Repository sorgenti di C sharp, su github.com.
• (EN) Sito di segnalazione bug, su github.com.
• citereffoldoc(EN) Denis Howe, C#, in Free On-line Dictionary of Computing. Disponibile con licenza mwbhiGFDL
• mwbhqGetting started with C#, su msdn.microsoft.com.
• mwbhyC# Language Specification (MSDN), su msdn.microsoft.com.
• mwbhgMono: Piattaforma di sviluppo Opensource, su mono-project.com.
• mwbhoUser Group Italiano dot NET, su ugidotnet.org.
• mwbhwDotGNU Project - a Free Software .NET compatible platform, su dotgnu.org.